home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Collections: Taifun
/
Taifun 078 (1988-11-15)(Ossowski, Stefan)(DE)(PD).zip
/
Taifun 078 (1988-11-15)(Ossowski, Stefan)(DE)(PD).adf
/
Cluster
/
ClusterDOC
< prev
next >
Wrap
Text File
|
1988-08-14
|
15KB
|
347 lines
Simulation eines Sternhaufens: Cluster V1.00
--------------------------------------------
© 1988 Unicorn Systems
Idee: A. K. Dewdney
Programm: Roger Meier
Cluster ist Public Domain Software: Weiterkopieren von Programm,
Quellcode und Anleitung ohne Gewinn ist erwünscht. Richtet
weitergehende Fragen zum Programm an Roger Meier, Bernstrasse 67,
4852 Rothrist (Schweiz).
Cluster besteht aus
-------------------
- Cluster Das Simulationsprogramm
- ClusterDOC Dieser Text hier
- ClusterIO.c, ClusterIO.h, Die verschiedenen Quellcode-Dateien
ClusterDEF.h, Cluster.c in der Sprache C (Aztec C 3.6)
Cluster.h
- starI, starII, starIII, Vorbereitete Sterndateien
starIV, starV
- StarShow Batchdatei für die Sterndateien
Compilieren (Aztec C 3.6a) des Programmes
-----------------------------------------
cc Cluster.c
cc ClusterIO.c
ln Cluster.o ClusterIO.o -lm -lc
Im Include-Verzeichnis müssen ClusterIO.h, Cluster.h und ClusterDEF.h
enthalten sein. Anstelle der m.lib kann auch eine Library mit doppelt
genauen Fliesskommafunktionen verwendet werden, allerdings wird die
Ausführung des Programmes dann empfindlich verlangsamt.
Allgemeines
-----------
A. K. Dewdney veröffentlichte im Spektrum der Wissenschaft einen
Bericht über die Simulation von Sternhaufen in einem Computer. Das
vorliegende Programm ist eine Umsetzung der im Bericht enthaltenen Ideen
für den Amiga.
Mit 'Cluster' kann das Verhalten eines Sternhaufens über Jahrtausende
hinweg in wenigen Minuten simuliert werden. Die Bahnen der Sterne
werden auf dem Bildschirm in Form von verschieden gefärbten Linien
angezeigt. Jede Linie steht dabei für einen Stern des Haufens und kann
eine von 16 Farben annehmen. Das Programm liest die Anfangsbedingungen
für eine Simulation von einer Textdatei in den Speicher ein. Diese
Datei kann mit einem beliebigen Texteditor erstellt werden und enthält
die Position, die Startgeschwindigkeit und die Farbe für jeden Stern des
Systems.
Die Simulation ist natürlich nicht der Wirklichkeit entsprechend.
Beim Computer handelt es sich um ein diskretes System, das dazu
verwendet wird, einen analogen Vorgang der Natur zu imitieren. Hier
sehen wir die Grenzen von Computern (besonders eines Homecomputers) sehr
deutlich: Wenn sich zwei Sterne sehr nahe kommen, steigt die
gegenseitige Beschleunigung durch die Gravitationskraft so stark an,
dass auch bei einem sehr kleinen Zeitinkrement der Simulation die Bahnen
der Sterne stark verfälscht werden. Diese Verfälschung der Bahnen steigt
mit der Anzahl der Zyklen der Simulation.
In der Natur besteht ein Sternhaufen aus tausenden bis
hunderttausenden von Einzelsternen. Auf dem Amiga können solche
Ansammlungen natürlich nicht simuliert werden, man würde schon nach dem
ersten Zyklus der Berechnung alt und grau sein.
Es ist auch sehr die Frage, ob ein Sternhaufen nur durch die
Gravitationskräfte der einzelnen Sterne zusammengehalten wird. Ich
verstehe nicht viel von Himmelsmechanik, aber sicher spielen schon der
interstellare Staub und die Dichte des Raumes selbst eine kleine Rolle.
Trotz Allem ist es aber sehr faszinierend, einem Sternhaufen bei der
Arbeit zuzusehen. Man erkennt auch, dass sich alle (jedenfalls meine)
Sternhaufen nach einer gewissen Zeit in die unendlichkeit des Raumes
zerstreuen. Darf astronomisch gesehen in diesem Fall überhaupt von einem
Sternhaufen geredet werden? Kommentare erwünscht.
Die Einheiten
-------------
Weil die Rechengenauigkeit der FFP-Routinen des Amiga nicht gerade
überragend ist (von -9.2234e18 bis 9.2234e18, die kleinsten Zahlen sind
5.421e-20 und -2.711e-20) und weil die Entfernungen im interstellaren
Raum ziemlich gross sind, habe ich folgende Einheiten gewählt:
Entfernung: 1 AE (astronomische Einheit) = 1.49*10^11 m (meter)
Masse: 1 Sonnenmasse = 1.9836519*10^33 g (gramm)
Zeit: 1 Jahr = 3.1536*10^7 s (sekunden)
Bei allen meinen Versuchen hatte ich nie einen Ueberlauf. Ich kann
mir aber vorstellen, dass sich bei entsprechend grossen Entfernungen (z.
B. Galaxienhaufen) schon mal ein Guru melden kann. Wenn die Einheiten
geändert werden, muss die Gravitationskonstante berücksichtigt werden:
In die oben genannten Einheiten umgerechnet, beträgt sie
AE³
39.91 -----------
sol * jahr²
Wenn andere Einheiten verwendet werden, muss die Konstante GKONST
(Datei ClusterDEF.h) entsprechend umgerechnet und geändert werden.
Die Sterndatei
--------------
Sie besteht nur aus Zahlen, die voneinander entweder durch
Leerzeichen, Tabulatoren oder Return-Zeichen getrennt sind. Die
Informationen müssen nach diesem Schema vorhanden sein:
nn
x1|y1|z1|vx1|vy1|vz1|m1|c1|
x2|y2|z2|vx2|vy2|vz2|m2|c2|
...
xnn|ynn|znn|vxnn|vynn|vznn|mnn|cnn|
Die |-Zeichen stehen für eines der genannten Trennzeichen. Die Zahl
nn beschreibt die Anzahl der Sterne, die in dieser Datei beschrieben
werden. x, y und z sind die Lage des Sterns in den drei Achsen des
Koordinatensystems: (+Z in Richtung des Betrachters)
+Y
| /-Z
|/
-X ----0---- +X
/|
+Z/ |
-Y
vx, vy und vz sind die Geschwindigkeiten in Richtung der drei Achsen,
die der betreffende Stern besitzt. Die Geschwindigkeit wird in
astronomischen Einheiten pro Jahr (AE/jahr) angegeben. m steht für die
Masse des Sterns in Anzahl Sonnenmassen (ich nenne diese manchmal auch
"sol" - es ist mir nichts besseres eingefallen). Schliesslich muss mit
c noch die Farbe des Sterns angegeben werden: Ein Wert von 1 bis 15 wird
erwartet. Null ist auch möglich, allerdings wird die Bahn des Sternes
dann unsichtbar. Bis auf die Farbe können alle Werte Fliesskommazahlen
sein. Der Exponent wird durch ein kleines oder grosses e von der
Mantisse getrennt. Sowohl die Mantisse wie auch der Exponent können mit
einem Vorzeichen versehen werden. In einer Zahl selber dürfen aber
keine Trennzeichen vorkommen:
Falsch: 1.22e -20 (wird als zwei Zahlen interpretiert)
Richtig: 1.22e-20
Die Anzeige der Sterne
----------------------
Auf dem Bildschirm wird die Ansicht von der positiven Seite der
Z-Achse her in Richtung negativer Seite wiedergegeben. Die Z-Achse ist
demzufolge nicht direkt sichtbar, allerdings lässt sich zum Teil aus den
Bahnen die Wirkung der Z-Achse indirekt erahnen.
Das Programm läuft auf einem PAL-Amiga einwandfrei, auf einem
NTSC-Amiga SOLLTE es ebenfalls keine Probleme geben - allerdings habe
ich das bisher noch nicht testen können.
Aufruf des Programmes
---------------------
Die Simulation kann nur vom CLI aus gestartet werden. Es stehen
folgende Optionen zur Verfügung:
-g Guru-Sicherung. Wenn die Option angegeben ist, wird die
oberste Zeile des Titelbalkens vom Screen noch angezeigt.
Dadurch kann der Screen nach einem Absturz nach unten
gezogen werden (aus den Augen, aus dem Sinn).
-s nn nn steht für den Skalierungsfaktor. Wenn -s nicht
angegeben wird, wird dieser Faktor vom Programm
ausgerechnet. Bevor ein Stern angezeigt werden kann,
wird seine Position mit diesem Faktor multipliziert.
Wenn ein gegebener Faktor kleiner gemacht wird, erscheint
der Sternhaufen aus grösserer Entfernung (und umgekehrt).
-d nn Wenn sich zwei Sterne näher als nn AE kommen, wird das
Zeitinkrement auf ein zehntel des ursprünglichen Wertes
verkleinert. Wenn sich die Sterne wieder voneinander
entfernt haben, wird das normale Zeitinkrement verwendet.
Wenn -d nicht angegeben wird, ist diese Grenze = 1 AE.
-t nn Zeitinkrement. Pro Berechnungszyklus wird die Zeit (das
Alter des Sternhaufens) um nn Jahre erhöht. Wenn -t nicht
angegeben wird, ist das Zeitinkrement = 1 Jahr.
-z nn Die Programmausführung bricht nach nn Zyklen ab. Wenn -z
nicht verwendet wird, muss die Simulation von Hand
(siehe unten) abgebrochen werden.
Filename Dies ist der Name der Textdatei, in der die Anfangsdaten
der einzelnen Sterne der Simulation enthalten sind (siehe
oben: Sterndatei).
Ein typischer Start einer Simulation sieht etwa so aus:
Cluster starI -t 0.1
Die Sterndatei wäre hier "starI", das Zeitinkrement ein Zehntel eines
Jahres (36.5 Tage). Wenn die Simulation läuft, stehen folgende
Kontrollen über die Tastatur zur Verfügung:
q Stoppt die Simulation, schliesst ein eventuell geöffnetes
Datenfenster und wartet anschliessend auf einen
zweiten (beliebigen) Tastendruck, um das Programm zu
verlassen.
d Oeffnet ein Fenster, in dem verschiedene Daten zur
laufenden Simulation angezeigt werden:
- Alter: Das Alter des Sternhaufens in Jahren.
- Zyklus: Die Zeit eines normalen Zyklus in Jahren.
- Skalierung: Der Faktor zur Anzeige auf dem Monitor.
- Objekte: Die Anzahl der Objekte der Simulation.
c Schliesst ein offenes Datenfenster.
Bitte beachten: Wenn mit 'd' ein Datenfenster geöffnet wurde, sind
die Kontrolltasten nur wirksam, wenn das Datenfenster NICHT AKTIV ist.
Dies ist deshalb der Fall, weil das Programm nur das Startfenster (mit
dem schwarzen Hintergrund) als Eingabequelle berücksichtigt.
Noch etwas zum Skalierungsfaktor: Programmintern gibt es zwei dieser
Faktoren, jeweils einen für die x- und y-Achse des Bildschirmes. Weil
die Höhe des Bildschirmes nicht feststeht (PAL = 256, NTSC = 200 Pixel)
werden zwei Faktoren benötigt, die nach dem Start des Programmes
berechnet werden. Auf diese Weise sollten mit verschiedenen Auflösungen
keine Verzerrungen der Darstellung auftreten.
Starshow
--------
Mit dem Programm kommen auch fünf vorbereitete Sterndateien und eine
Batchdatei, die diese fünf Simulationen nacheinander ablaufen lässt. Um
das Ganze zu starten geht man etwa so vor:
1. CLI eröffnen
2. Befehl "cd AUGS_8-88:Utilities/Cluster" eingeben.
3. Befehl "execute AUGS_8-88:Utilities/Cluster/StarShow" eingeben.
Sobald die erste Simulation begonnen hat, stehen die oben
beschriebenen Kontrollmöglichkeiten zur Verfügung. Wenn alle fünf
Simulationen beendet sind, findet sich der Amiga im CLI-Fenster wieder.
Das Schliessen der CLI-Fensters erfolgt durch den Befehl "endcli".
Noch eine Anmerkung zu "starII" und "starIII": Es handelt sich hier
um die 17 der Sonne am nächsten Stehenden Sterne, allerdings sind die
Daten etwas 'frisiert': Bei beiden Sterndateien sind die Entfernungen um
den Faktor 1000 vermindert worden. Bei "starII" wurden die
Sternmassen um den Faktor 10, bei "starIII" um den Faktor 100 erhöht. Nur
auf diese Weise werden die Bahnen etwas abgelenkt. Wenn die Daten den
Natürlichen Gegebenheiten entsprechen würden, verliefen die Sternbahnen
schnurgerade über den Bildschirm.
Zeitfragen
----------
Das Programm ist so aufgebaut, dass für n Sterne n² Berechnungen der
Kräfte zwischen den Sternen ausgeführt werden müssen. Nach diesen n²
Rechnungen ist ein Zyklus vollzogen und der Sternhaufen wird um ein
Zeitinkrement älter. Eine Berechnung der Kräfte zwischen zwei Objekten
erfordert aber wiederum einige einzelne Operationen mit Fliesskomma-
zahlen. Wenn all dies berücksichtigt wird, findet man für einen Zyklus
folgende Mengen an Fliesskommaoperationen:
Grundrechenarten: 21n² + 29n
Vergleiche (ca.): 2n² - 2n + 1
Quadratwurzelberechnungen: n² - n
Zuweisungen (ca.): 10n² - n + 2
Beispielsweise benötigt ein Zyklus in einem System mit 18 Sternen
(n = 18) 11469 Operationen, davon sind 306 Wurzelberechnungen.
Fehler im Programm
------------------
Vermutlich eine endlose Liste. Ich bin für Informationen über Bugs
des Programmes jedenfalls sehr dankbar. Bekanntschaft mit dem Guru ist
allerdings eher selten.
Was verbessert werden kann
--------------------------
Das Programm erkennt in der jetzigen Version keine Kollisionen
zwischen zwei Gestirnen. Deshalb geschieht es oft, dass sich zwei
Sterne gegenseitung umrunden (Doppelsystem) und schliesslich, anstatt zu
kollidieren, ins All geschleudert werden. Man könnte den Durchmesser
der Sterne in die Sterndatei aufnehmen und bei jedem Berechnungszyklus
auf Zusammenstösse testen. Wenn sich zwei Sterne treffen, sollten sie
zu einem einzigen Objekt zusammengefasst werden und in einer den
ursprünglichen Flugrichtungen und Geschwindigkeiten entsprechenden Bahn
weiterfliegen.
Mehrere Sterne, die nahe zusammenliegen, könnte man mathematisch für
eine gewisse Zeit zu einem einzigen Objekt verschmelzen. Wenn sie sich
dann wieder genügend voneinander entfernt haben, müssten die
einzelsterne wieder hervortreten. Auf diese Weise könnte Rechenzeit
gespart werden, und es könnten grössere Sternhaufen simuliert werden.
Die Entfernungsgrenze, nach der das Zeitinkrement verkleinert wird,
könnte etwas fliessender sein: Anstelle von nur einer Stufe vielleicht
fünf oder zehn. Natürlich müsste das Zeitinkrement nicht linear,
sondern in einer geometrischen Kurve steigen. So würde die Genauigkeit
einer Simulation erhöht und trotzdem Rechenzeit gespart.
Die Anzeige der Sternbahnen könnte anstelle aus Punkten aus Linien
bestehen. Die Linien würden entstehen, indem einfach die letzte
Position eines Sternes mit der neuen verbunden würde. Ebenfalls könnte
(per Option beim Aufruf) der Sternhaufen zweimal aus einer
jeweils anderen Perspektive angezeigt werden. Man könnte das Ganze auf
die Spitze treiben, indem man eine Rot-Grün Brille trägt und beide
Bilder übereinanderlegt. So würde ein räumlicher Eindruck entstehen
(allerdings müsste auf Farbige Sternbahnen verzichtet werden).
Schliesslich sind die Steuerungsmöglichkeiten einer gestarteten
Simulation etwas beschränkt. Gut wäre: Aendern des Skalierungsfaktors
(gewissermassen ein Zoom-Objektiv), ändern der Bahndaten eines einzelnen
Sterns, ändern des Zeitinkrements, stoppen der Simulation und
abspeichern der aktuellen Bahndaten als neue Sterndatei. Die Farben
könnten ähnlich wie in einer Sterndatei beim Start des Programmes aus
einer Datei gelesen werden.
Wenn ich in den nächsten Wochen Zeit finde, werde ich einige der be-
schriebenen Punkte in einer zweiten Version berücksichtigen.
Fehlerbeschreibung an/ weitere Infos von
----------------------------------------
Unicorn Systems
Roger Meier
Bernstrasse 67
4852 Rothrist
!!!! Join the Amiga User Group Switzerland !!!!
(Adresse wie oben)